<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 1.构造函数 调用方式 换成new （实例化）
      // 表示一个类的概念 ，所有 首字符约定俗成是大写；

      // function Person(name,age){
      //     // 构造函数里的this 指向 实例化的对象；
      //     this.name = name;
      //     this.age = age;
      //     this.fn = function(){
      //         console.log("fn");
      //     }
      // }

      // let zhangsan = new Person("张三",20); // 实例化
      // let lisi  = new Person("李四",22);

      // 2.公共空间 ; 构造函数 有自己的公共空间；prototype 原型；
      // 一般 我们会把属性 放在 构造函数内部
      // 把方法 放在公共空间原型上；
      // 整个构造函数 是由2个部分 1.构造函数自身 2.构造函数的原型 共同构成；
      // function Person(name,age){
      //     // 构造函数里的this 指向 实例化的对象；
      //     this.name = name;
      //     this.age = age;
      //     // this.fn = function(){
      //     //     console.log("fn");
      //     // }
      // }
      // Person.prototype.fn = function(){
      //     console.log("fn");
      // }

      // let zhangsan = new Person("张三",20); // 实例化
      // let lisi  = new Person("李四",22);
      // console.log(zhangsan.fn===lisi.fn); // false;

      // 3.练习：

      // 所有狗类的公共特性及行为；
      function Dog(name) {
        this.name = name;
      }
      Dog.prototype.action = function () {
        console.log("wow wow !!!");
      };

      let xiaohaung = new Dog("小黄");
      xiaohaung.action();
      let xiaohei = new Dog("小黑");
      setInterval(() => {
        xiaohei.action();
      }, 1000);

      // 把选项卡改成 构造函数；
    </script>
  </body>
</html>
